<?php

/**
 * La classe template va nous afficher la page html
 * 
 */
class Template {
    /**
     * template::getView() - Permet de récuperer le nom de la vue correspondant à une zone
     *
     * @param mixed $zoneName - Le nom de la zone tel qu'indiqué dans la fonction getTemplate,
     * par exemple $this->displayZone('main_zone').
     * Les vues peuvent etre modifiées n'importe ou et la valeur correspond à la classe du dossier Views
     * que l'on souhaite afficher
     * @return
     */
    public static function getView($zoneName)
    {
        if (isset ($_SESSION ['view_' . $zoneName])) {
            return $_SESSION ['view_' . $zoneName];
        }
        return null;
    }

    /**
     * template::setView() - Fait correspondre à une zone donnée une vue du dossier Views
     *
     * @param mixed $zoneName Le nom de la zone que l'on souhaite modifier
     * @param mixed $className - Le nom de la classe du dossier View que l'on souhaite attribuer à une zone
     * @return
     */
    public static function setView($zoneName, $className)
    {
        if (class_exists ($className)) {
            $_SESSION ['view_' . $zoneName] = $className;
        }
    }

    /**
     * template::displayZone() Retourne le code html d'une zone
     *
     * @param mixed $zoneName Le nom de la zone dont on souhaite obtenir le code html
     * @return
     */
    public static function displayZone($zoneName)
    {
        // On vérifie en premier lieu si le nom d'une zone n'a pas été passée en parametre par l'url.
        // C'est de cette manière que l'on va "changer de page" avec un lien par exemple.
        // un lien http://ROOT/index.php?main_zone=faq va tenter d'attribuer à la zone main_zone la vue de classe faq
        if (isset ($_GET [$zoneName])) {
            // On s'assure que la vue que l'on va instancier existe
            if (class_exists ($_GET [$zoneName])) {
                $viewClass = $_GET [$zoneName];
                // On attribue la vue à la zone
                template::setView ($zoneName, $viewClass);
                // On créé la classe de la vue, et on retourne le code html
                $view = new $viewClass ();
                return $view->displayView ();
            }
        }
        // Si une zone n'a pas de vue attribuée depuis l'URL, elle a peut etre la valeur encore stockée en session
        if (self::getView ($zoneName) != null) {
            $viewClass = self::getView ($zoneName);
            $view = new $viewClass ();
            return $view->displayView ();
        }
        // Si la zone n'a pas de vue attribuée ni dans l'URL ni dans le tableau de session, on retourne la vue par défaut
        if ($zoneName == 'main_zone') {
            $view = new Main ();
            return $view->displayView ();
        }
        if ($zoneName == 'resultats') {
            $view = new Operations();
            return $view->displayView();
        }
        return '';
    }

    /**
     * template::getTemplate() Affiche le contenu de la page html
     *
     * @return Le code html complet pour la page
     */
    public function getTemplate()
    {
        $lang = Language::getLang();
        $res = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> ';
        $res .= '<html>';
        $res .= '<head>';
        $res .= '<meta http-equiv="Content-Type" content="text/html;  charset="UTF-8">';
        $res .= '<link rel="stylesheet" href="' . TEMPLATE_ROOT . '/Style/style.css" type="text/css" />';
        $res .= '<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.js"></script>
   				 <script type="text/javascript" src="' . TEMPLATE_ROOT . '/Js/jquery.form.js"></script>';

        $res .= '<script src="https://www.google.com/jsapi?key=' . G_KEY . '"></script>';
     	$res .= '<script type="text/javascript" src="' . TEMPLATE_ROOT . '/Js/googleImage.js"></script>';
        $res .= '<script type="text/javascript" src="' . TEMPLATE_ROOT . '/Js/javascript.js"></script>
				<script type="text/javascript">
					load_js("' . $lang . '");
					LoadGImage("");
				</script>';
        $res .= '</head> ';
        $res .= '<body> ';
        $res .= '<input type="hidden" id="loading_search" value="0">';
        $res .= '<div id="main">';
        $res .= '<div class="top_header">';
        $res .= Language::getStr();
        // Les langues disponibles
        $res .= '<a href="index.php?lang=fr" class="lang">
        			<img height="16" border="0" width="16" title="français" alt="français" src="' . TEMPLATE_ROOT . '/Style/francais.png">
        		</a>';
        $res .= '<a href="index.php?lang=en" class="lang">
        			<img height="16" border="0" width="16" title="anglais" alt="anglais" src="' . TEMPLATE_ROOT . '/Style/anglais.png">
        		</a>';
        $res .= '<a href="index.php?lang=es" class="lang">
        			<img height="16" border="0" width="16" title="espagnol" alt="espagnol" src="' . TEMPLATE_ROOT . '/Style/espagnol.png">
        		</a>';
        $res .= '<a href="index.php?lang=it" class="lang">
        			<img height="16" border="0" width="16" title="italien" alt="italien" src="' . TEMPLATE_ROOT . '/Style/italien.png">
        		</a>';
        $res .= '<a href="index.php?lang=de" class="lang">
        			<img height="16" border="0" width="16" title="allemand" alt="allemand" src="' . TEMPLATE_ROOT . '/Style/allemand.png">
        		</a>';

        $res .= '</div>';
       
        // Dans cette espace on affiche une zone
        $res .= self::displayZone ('main_zone');
        $res .= '</div>';
        $res .= '</body> ';
        $res .= '</html> ';

        return $res;
    }
}

?>